from django import template

register = template.Library()

@register.filter(name='add_class')
def add_class(field, css):
    """
    给表单字段的 widget 添加 CSS 类。
    """
    if hasattr(field, 'as_widget'):
        # 如果传入的是原始字段对象，直接操作其 widget
        field.field.widget.attrs['class'] = css
        return field
    # 如果传入的是已经渲染的字符串，则直接返回，避免报错
    return field

@register.filter(name='attr')
def add_attribute(field, attr):
    """
    给表单字段的 widget 添加任意属性，格式为 'name:value'。
    """
    if hasattr(field, 'as_widget'):
        try:
            name, value = attr.split(':')
            field.field.widget.attrs[name] = value
        except ValueError:
            # 如果格式不正确，不做任何操作
            pass
        return field
    # 如果传入的是已经渲染的字符串，则直接返回，避免报错
    return field

@register.filter
def get_field(form, field_name):
    return form[field_name]

@register.filter
def get_field_errors(form, field_name):
    return form[field_name].errors